package com.jimikongjian.service.base;

import com.jimikongjian.models.ResponseMessage;
import com.jimikongjian.models.Token;
import com.jimikongjian.models.UserInfo;
import org.springframework.transaction.annotation.Transactional;

/**
 * Created by fuxiuyang on 17/2/26.
 */
public interface IUserService {

    /**
     * 用户登录
     * @param email
     * @param password
     * @return 查找成功就返回成功的信息码,否则返回错误失败码
     */
    public ResponseMessage login(String email, String password, String uuid, String code);

    /**
     * 用来生成登录验证码图片，并且将图片压缩成base64,返回给前端
     * @return
     * @throws Exception
     */
    public ResponseMessage getCodeImage() throws Exception;

    /**
     * 用户登出
     * @param email
     * @return 查找成功就返回成功的信息码,否则返回错误失败码
     */
    public void logout(String email);

    /**
     * 用户注册
     * @param email
     * @param password
     * @param nick 用户昵称
     * @param code 验证码
     * @return 插入成功就返回成功的信息码,否则返回错误失败码
     */
    @Transactional
    public ResponseMessage register(String email, String password, String nick, String code);

    /**
     * 重置密码第一步，验证邮箱验证码是否和系统存储的一样
     * @param email
     * @param code
     * @return
     */
    public ResponseMessage updatePassWord01(String email, String code);

    /**
     * 重置密码第二步，将新密码写入数据库中，写入之前，使用code验证该调用已经通过了第一步。
     * @param email
     * @param password
     * @param code
     * @return
     */
    public ResponseMessage updatePassWord02(String email, String password, String code);

    /**
     * 获取用户信息
     * @param id
     * @param userId
     * @return
     */
    public ResponseMessage getUserInfo(int id, int userId);

    /**
     * 获取用户信息
     * @param userInfo
     * @return
     */
    public ResponseMessage updateUserInfo(UserInfo userInfo);

    /**
     * 验证邮箱是否已经被注册
     * @param email
     * @return
     */
    public ResponseMessage isRegister(String email);


    /**
     * 向邮箱发送注册验证码
     * @param email
     * @return
     */
    public ResponseMessage sendRegisterMail(String email);

    /**
     * 向邮箱发送密码重置验证码
     * @param email
     * @return
     */
    public ResponseMessage sendResetPwMail(String email);

    /**
     * 查找数据库中是否含有该用户
     * @param emailAddress
     * @return 如果含有则返回true,否则返回false
     */
    public boolean hasEmail(String emailAddress);

    /**
     * 查找数据库中是否含有该用户
     * @param userId
     * @return 如果含有则返回true,否则返回false
     */
    public boolean hasUser(int userId);
}
